home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PACKET / CBBS60SO.ZIP / MBMODE.C < prev    next >
Text File  |  1987-10-13  |  3KB  |  145 lines

  1. /*
  2.  *  MBMODE.C - 12/28/86 - Mode command to setup the ports.
  3.  */
  4.  
  5. /*
  6.  *  Copyright (C) 1986
  7.  *  H. N. Oredson
  8.  *  134 Ponderosa Drive
  9.  *  Santa Cruz, ca 95060
  10.  *
  11.  *  This code was created and distributed
  12.  *  to the packet radio community by W0RLI and VE3GYQ.
  13.  *  It may be freely copied for non-commercial use,
  14.  *  as long is this notice is retained.
  15.  *
  16.  *  This notice and Copyright apply to all modules
  17.  *  referenced by this module.
  18.  */
  19.  
  20. #include <dos.h>
  21. #include <ctype.h>
  22.  
  23. #define is   ==
  24. #define isnt !=
  25. #define false 0
  26. #define true  1
  27. #define and  &&
  28. #define or   ||
  29.  
  30. static char b1[8] = { '1', '1', '3', '6', '1', '2', '4', '9' };
  31. static char b2[8] = { '1', '5', '0', '0', '2', '4', '8', '6' };
  32. static char pars[4] = { 'N', 'O', 'N', 'E' };
  33. static char stops[2] = { '1', '2' };
  34. static char wlens[4] = { '?', '?', '7', '8' };
  35.  
  36. main(argc, argv)
  37. int argc;
  38. char *argv[];
  39. {
  40.   char *p;
  41.   int  port, baud, par, stop, wlen;
  42.   short ok;
  43.   union REGS inreg, outreg;
  44.  
  45.   if (argc < 1) oopsy("Wrong number of arguments");
  46.  
  47. /*
  48.  *  Command line to upper case.
  49.  */
  50.  
  51.   for (p = argv[1]; *p; p++) if (islower(*p)) *p = toupper(*p);
  52.  
  53. /*
  54.  *  Find port number.
  55.  */
  56.  
  57.   for (p = argv[1]; *p and (*p isnt ':'); p++);
  58.   if (*p isnt ':') oopsy("No colon after COMn");
  59.  
  60.   port = (int) (*(p - 1) - '0');
  61.   if (isdigit(*(p - 2))) port += 10 * (int) (*(p - 2) - '0');
  62.   port--;
  63.  
  64.   if ((port < 0) or (port > 15)) oopsy("Port number out of range");
  65.  
  66.   p++;
  67.  
  68.   if (!*p) oopsy("Parameters missing");
  69.  
  70. /*
  71.  *  Find baud rate.
  72.  */
  73.  
  74.   ok = false;
  75.   for (baud = 0; !ok and (baud < 8); baud++)
  76.   {
  77.     ok = (*p is b1[baud]) and (*(p + 1) is b2[baud]);
  78.   }
  79.  
  80.   baud--;
  81.  
  82.   if (!ok) oopsy("Baud rate not correct");
  83.  
  84.   for (; *p and (*p isnt ','); p++);
  85.   if (!*p++) oopsy("Missing parameter");
  86.   if (!*p)   oopsy("Missing parameter");
  87.  
  88. /*
  89.  *  Find parity.
  90.  */
  91.  
  92.   ok = false;
  93.   for (par = 0; !ok and (par < 4); par++)
  94.   {
  95.     ok = (pars[par] is *p);
  96.   }
  97.   par--;
  98.   if (!ok) oopsy("Parity not N, E, or O");
  99.   for (; *p and (*p isnt ','); p++);
  100.   if (!*p++) oopsy("Missing parameter");
  101.   if (!*p) oopsy("Missing parameter");
  102.  
  103. /*
  104.  *  Find word length.
  105.  */
  106.  
  107.   ok = false;
  108.   for (wlen = 0; !ok and (wlen < 4); wlen++)
  109.   {
  110.     ok = (wlens[wlen] is *p);
  111.   }
  112.   wlen--;
  113.   if (!ok) oopsy("Word length is not 7 or 8");
  114.   for (; *p and (*p isnt ','); p++);
  115.   if (!*p++) oopsy("MIssing parameter");
  116.   if (!*p)   oopsy("Missing parameter");
  117.  
  118. /*
  119.  *  Find number of stop bits.
  120.  */
  121.  
  122.   ok = false;
  123.   for (stop = 0; !ok and (stop < 2); stop++)
  124.   {
  125.     ok = (stops[stop] is *p);
  126.   }
  127.   stop--;
  128.   if (!ok) oopsy("Number of stop bits not 1 or 2");
  129.  
  130.   inreg.h.al = 32 * baud + 8 * par + 4 * stop + wlen;
  131.  
  132.   printf("     COM%d:%c%c,%c,%c,%c = %x\n", port + 1,
  133.     b1[baud], b2[baud], pars[par], wlens[wlen], stops[stop], inreg.h.al);
  134.  
  135.   inreg.x.dx = port;
  136.   inreg.h.ah = 0;
  137.   int86 (0x14, &inreg, &outreg);
  138. }
  139.  
  140. oopsy(p)
  141. char *p;
  142. {
  143.   printf("%s\n",p); exit(1);
  144. }
  145.